/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ik.pbs.Manejadores;

/**
 *
 * @author alexis
 */
import com.ik.pbs.Encapsulados.Comentarios;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class ManejadorComentarios {

    public static ManejadorComentarios manager = null;
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD");
    private SimpleDateFormat shf = new SimpleDateFormat("HH:mm:ss");

    public static ManejadorComentarios getInstance() {
        if (manager == null) {
            manager = new ManejadorComentarios();
        }

        return manager;
    }

    public void ManejadorComentarios() {
    }

    public ArrayList<Comentarios> getComentariosAUnUsuario(Connection con, int usuario) {
        ArrayList<Comentarios> arregloComentarios = new ArrayList();

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select a.* from comentarios a, anuncios b, usuarios c "
                + "where a.anuncios_id = b.id "
                + "and b.usuarios_id = c.id "
                + "and c.id=? "
                + "and a.respuesta is null "
                + "order by a.anuncios_id";

        try {
            state = con.prepareCall(query);
            state.setInt(1, usuario);
            rd = state.executeQuery();

            while (rd.next()) {
                Comentarios Comentarios = new Comentarios();
                Comentarios.setAnuncio(ManejadorAnuncios.getInstance().getAnuncio(con, rd.getInt("anuncios_id")));
                Comentarios.setNombre(rd.getString("nombre"));
                Comentarios.setId(rd.getInt("id"));
                Comentarios.setComentario(rd.getString("comentario"));
                Comentarios.setFecha(rd.getString("fecha"));
                Comentarios.setRespuesta(rd.getString("respuesta"));
                Comentarios.setFechaRespuesta(rd.getString("fecharespuesta"));
                arregloComentarios.add(Comentarios);
            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al tomar los comentarios!", "Error",
                    JOptionPane.WARNING_MESSAGE);
        }

        return arregloComentarios;
    }

    public ArrayList<Comentarios> getComentarios(Connection con) {
        ArrayList<Comentarios> arregloComentarios = new ArrayList();

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from comentarios order by anuncios_id";

        try {
            state = con.prepareCall(query);
            rd = state.executeQuery();

            while (rd.next()) {
                Comentarios Comentarios = new Comentarios();
                Comentarios.setAnuncio(ManejadorAnuncios.getInstance().getAnuncio(con, rd.getInt("anuncios_id")));
                Comentarios.setNombre(rd.getString("nombre"));
                Comentarios.setId(rd.getInt("id"));
                Comentarios.setComentario(rd.getString("comentario"));
                Comentarios.setFecha(rd.getString("fecha"));
                Comentarios.setRespuesta(rd.getString("respuesta"));
                Comentarios.setFechaRespuesta(rd.getString("fecharespuesta"));
                arregloComentarios.add(Comentarios);
            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al tomar los comentarios!", "Error",
                    JOptionPane.WARNING_MESSAGE);
        }

        return arregloComentarios;
    }

    public List<Comentarios> getComentariosAnuncio(Connection con, int codigo) {
        List<Comentarios> Comentarios = new ArrayList<Comentarios>();

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from comentarios where anuncios_id = ? order by id";

        try {
            state = con.prepareCall(query);
            state.setInt(1, codigo);
            rd = state.executeQuery();

            while (rd.next()) {

                Comentarios conmen = new Comentarios();
                conmen.setAnuncio(ManejadorAnuncios.getInstance().getAnuncio(con, rd.getInt("anuncios_id")));
                conmen.setNombre(rd.getString("nombre"));
                conmen.setId(rd.getInt("id"));
                conmen.setComentario(rd.getString("comentario"));
                conmen.setFecha(rd.getString("fecha"));
                conmen.setRespuesta(rd.getString("respuesta"));
                conmen.setFechaRespuesta(rd.getString("fecharespuesta"));
                
                Comentarios.add(conmen);
            }

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }

        return Comentarios;
    }

    public Comentarios getComentario(Connection con, int codigo) {
        Comentarios Comentarios = null;

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from comentarios where id = ?";

        try {
            state = con.prepareCall(query);
            state.setInt(1, codigo);
            rd = state.executeQuery();

            while (rd.next()) {

                Comentarios = new Comentarios();
                Comentarios.setAnuncio(ManejadorAnuncios.getInstance().getAnuncio(con, rd.getInt("anuncios_id")));
                Comentarios.setNombre(rd.getString("nombre"));
                Comentarios.setId(rd.getInt("id"));
                Comentarios.setComentario(rd.getString("comentario"));
                Comentarios.setFecha(rd.getString("fecha"));
                Comentarios.setRespuesta(rd.getString("respuesta"));
                Comentarios.setFechaRespuesta(rd.getString("fecharespuesta"));
            }

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }

        return Comentarios;
    }

    public boolean insertarComentario(Connection con, Comentarios Comentarios) {
        PreparedStatement state;

        String query = "insert into comentarios values(?,?,?,?,?,?,?)";
        try {


            state = con.prepareStatement(query);
            state.setInt(1, Comentarios.getId());
            state.setInt(2, Comentarios.getAnuncio().getId());
            state.setString(3, Comentarios.getNombre());
            state.setString(4, Comentarios.getComentario());
            state.setString(6, Comentarios.getRespuesta());
            state.setString(5, Comentarios.getFecha());
            state.setString(7, Comentarios.getFechaRespuesta());


            state.execute();
            return true;
        } catch (SQLException ex) {
            return actualizarComentario(con, Comentarios);
        }


    }

    public boolean actualizarComentario(Connection con, Comentarios Comentarios) {
        PreparedStatement state;

        String query = "update Comentarios set nombre = ?,comentario = ?,respuesta = ?,fecha = ?,fecharespuesta = ?, anuncios_id = ? where id = ?";

        try {
            state = con.prepareStatement(query);
            state.setInt(7, Comentarios.getId());
            state.setString(1, Comentarios.getNombre());
            state.setString(2, Comentarios.getComentario());
            state.setString(3, Comentarios.getRespuesta());
            state.setString(4, Comentarios.getFecha());
            state.setInt(6, Comentarios.getAnuncio().getId());
            state.setString(5, Comentarios.getFechaRespuesta());

            state.execute();
            return true;

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            return false;
        }


    }

    public int getNext(Connection con) {
        try {
            ResultSet rd = null;
            PreparedStatement state;
            String query = "select max(id) as max from comentarios";

            state = con.prepareStatement(query);
            rd = state.executeQuery();

            if (!rd.next()) {
                return 1;
            } else {
                return (rd.getInt("max") + 1);
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return 0;
    }
}
